home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / Small Eiffel 0.4.8 / lib_std / integer_ref.e < prev    next >
Text File  |  1997-04-13  |  3KB  |  139 lines

  1. -- Part of SmallEiffel -- Read DISCLAIMER file -- Copyright (C) 
  2. -- Dominique COLNET and Suzanne COLLIN -- colnet@loria.fr
  3. --
  4. class INTEGER_REF
  5.  
  6. inherit
  7.    NUMERIC
  8.       undefine out_in_tagged_out_memory, fill_tagged_out_memory
  9.       redefine
  10.      infix "^", prefix "-", prefix "+"
  11.       end;
  12.    COMPARABLE
  13.       redefine compare, hash_code, out_in_tagged_out_memory, 
  14.      fill_tagged_out_memory
  15.       end;
  16.    
  17. creation make
  18.    
  19. feature 
  20.  
  21.    item: INTEGER;
  22.    
  23.    make(value: INTEGER) is
  24.       do
  25.      item := value
  26.       end;
  27.    
  28. feature
  29.    
  30.    set_item(value: like item) is
  31.       do
  32.      item := value;
  33.       end;
  34.  
  35.    infix "+" (other: like Current): like Current is
  36.      -- Add `other' to Current.
  37.       do
  38.      !!Result.make (item + other.item)
  39.       end;
  40.    
  41.    infix "-" (other: like Current): like Current is
  42.      -- Subtract `other' from Current.
  43.       do
  44.      !!Result.make (item - other.item)
  45.       end;
  46.  
  47.    infix "*" (other: like Current): like Current is
  48.      -- Multiply `other' by Current.
  49.       do
  50.      !!Result.make (item * other.item)
  51.       end;
  52.  
  53.    infix "/" (other: like Current): DOUBLE_REF is
  54.      -- Divide Current by `other'.
  55.      -- Note: Integer division
  56.       do
  57.      !!Result.make (item / other.item)
  58.       end;
  59.  
  60.    infix "//" (other: like Current): like Current is
  61.      -- Divide Current by `other'.
  62.      -- Note : Integer division
  63.       require
  64.      valid_divisor (other)
  65.       do
  66.      !!Result.make (item // other.item)
  67.       end;
  68.  
  69.    infix "\\" (other: like Current): like Current is
  70.      -- Remainder of division of Current by `other'.
  71.       require
  72.      valid_modulus: valid_divisor (other)
  73.       do
  74.      !!Result.make (item \\ other.item)
  75.       end;
  76.  
  77.    infix "^" (exp: INTEGER): like Current is
  78.      -- Raise Current to `exp'-th power.
  79.       do
  80.      !!Result.make (item ^ exp)
  81.       end;
  82.  
  83.    infix "<" (other: like Current): BOOLEAN is
  84.      -- Is Current less than `other'?
  85.       do
  86.      Result := (item < other.item)
  87.       end;
  88.  
  89.    prefix "+": like Current is
  90.       do
  91.      !!Result.make (item)
  92.       end;
  93.  
  94.    prefix "-": like Current is
  95.      -- Unary minus of Current
  96.       do
  97.      !!Result.make (-item)
  98.       end;
  99.  
  100.    compare (other: like Current): INTEGER is
  101.      -- Compare Current with `other'.
  102.      -- '<' <==> Result < 0
  103.      -- '>' <==> Result > 0
  104.      -- Otherwise Result = 0
  105.       do
  106.      Result := item - other.item
  107.       end;
  108.  
  109.    hash_code: INTEGER is
  110.       do
  111.      if item < 0 then
  112.         Result := -item
  113.      else
  114.         Result := item
  115.      end;
  116.       end;
  117.  
  118.    valid_divisor(other: like Current): BOOLEAN is
  119.       do
  120.      Result := (other.item /= 0)
  121.       end;
  122.  
  123.    one: like Current is
  124.       do
  125.      !!Result.make (1)
  126.       end;
  127.  
  128.    zero: like Current is
  129.       do
  130.      !!Result.make (0)
  131.       end;
  132.  
  133.    out_in_tagged_out_memory, fill_tagged_out_memory is
  134.       do
  135.      item.fill_tagged_out_memory;
  136.       end;
  137.  
  138. end -- INTEGER_REF
  139.